function SoftKey3W() {
    var u = document.URL;
    var url;
    if (u.substring(0, 5) == "https") {
        //alert("https");
        url = "wss://localhost:4006/xxx";
    } else {
        url = "ws://127.0.0.1:4006/xxx";
        //alert(u.substring(0, 5));
    }

    var Socket_UK;

    if (typeof MozWebSocket != "undefined") {
        this.Socket_UK = new MozWebSocket(url, "usbkey-protocol");
    } else {
        this.Socket_UK = new WebSocket(url, "usbkey-protocol");
    }

    this.FindPort = function(start) {
        var msg = {
            FunName: "FindPort",
            start: start
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.FindPort_2 = function(start, in_data, verf_data) {
        var msg = {
            FunName: "FindPort_2",
            start: start,
            in_data: in_data,
            verf_data: verf_data
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.FindPort_3 = function(start, in_data, verf_data) {
        var msg = {
            FunName: "FindPort_3",
            start: start,
            in_data: in_data,
            verf_data: verf_data
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.GetVersion = function(Path) {
        var msg = {
            FunName: "GetVersion",
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.GetVersionEx = function(Path) {
        var msg = {
            FunName: "GetVersionEx",
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.GetID_1 = function(Path) {
        var msg = {
            FunName: "GetID_1",
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.GetID_2 = function(Path) {
        var msg = {
            FunName: "GetID_2",
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };


    this.sRead = function(Path) {
        var msg = {
            FunName: "sRead",
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.sWrite = function(InData, Path) {
        var msg = {
            FunName: "sWrite",
            InData: InData,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.sWrite_2 = function(InData, Path) {
        var msg = {
            FunName: "sWrite_2",
            InData: InData,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.sWrite_2Ex = function(InData, Path) {
        var msg = {
            FunName: "sWrite_2Ex",
            InData: InData,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.sWriteEx = function(InData, Path) {
        var msg = {
            FunName: "sWriteEx",
            InData: InData,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.sWriteEx_New = function(InData, Path) {
        var msg = {
            FunName: "sWriteEx_New",
            InData: InData,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.sWrite_2Ex_New = function(InData, Path) {
        var msg = {
            FunName: "sWrite_2Ex_New",
            InData: InData,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.SetCal = function(Hkey, Lkey, new_Hkey, new_Lkey, Path) {
        var msg = {
            FunName: "SetCal",
            Hkey: Hkey,
            Lkey: Lkey,
            new_Hkey: new_Hkey,
            new_Lkey: new_Lkey,
            Path: Path

        };
        this.Socket_UK.send(JSON.stringify(msg));
    };


    this.SetBuf = function(InData, pos) {
        var msg = {
            FunName: "SetBuf",
            InData: InData,
            pos: pos
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.GetBuf = function(pos) {
        var msg = {
            FunName: "GetBuf",
            pos: pos
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.YRead = function(Address, HKey, LKey, Path) {
        var msg = {
            FunName: "YRead",
            Address: Address,
            HKey: HKey,
            LKey: LKey,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.YWrite = function(InData, Address, HKey, LKey, Path) {
        var msg = {
            FunName: "YWrite",
            InData: InData,
            Address: Address,
            HKey: HKey,
            LKey: LKey,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.YReadEx = function(Address, len, HKey, LKey, Path) {
        var msg = {
            FunName: "YReadEx",
            Address: Address,
            len: len,
            HKey: HKey,
            LKey: LKey,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.YWriteEx = function(Address, len, HKey, LKey, Path) {
        var msg = {
            FunName: "YWriteEx",
            Address: Address,
            len: len,
            HKey: HKey,
            LKey: LKey,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.YReadString = function(Address, len, HKey, LKey, Path) {
        var msg = {
            FunName: "YReadString",
            Address: Address,
            len: len,
            HKey: HKey,
            LKey: LKey,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.YWriteString = function(InString, Address, HKey, LKey, Path) {
        var msg = {
            FunName: "YWriteString",
            InString: InString,
            Address: Address,
            HKey: HKey,
            LKey: LKey,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.SetWritePassword = function(W_Hkey, W_Lkey, new_Hkey, new_Lkey, Path) {
        var msg = {
            FunName: "SetWritePassword",
            W_Hkey: W_Hkey,
            W_Lkey: W_Lkey,
            new_Hkey: new_Hkey,
            new_Lkey: new_Lkey,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.SetReadPassword = function(W_Hkey, W_Lkey, new_Hkey, new_Lkey, Path) {
        var msg = {
            FunName: "SetReadPassword",
            W_Hkey: W_Hkey,
            W_Lkey: W_Lkey,
            new_Hkey: new_Hkey,
            new_Lkey: new_Lkey,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };


    this.DecString = function(InString, Key) {
        var msg = {
            FunName: "DecString",
            InString: InString,
            Key: Key
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.EncString = function(InString, Path) {
        var msg = {
            FunName: "EncString",
            InString: InString,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.EncString_New = function(InString, Path) {
        var msg = {
            FunName: "EncString_New",
            InString: InString,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.Cal = function(Path) {
        var msg = {
            FunName: "Cal",
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.Cal_New = function(Path) {
        var msg = {
            FunName: "Cal_New",
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.SetCal_2 = function(Key, Path) {
        var msg = {
            FunName: "SetCal_2",
            Key: Key,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.SetCal_New = function(Key, Path) {
        var msg = {
            FunName: "SetCal_New",
            Key: Key,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.SetEncBuf = function(InData, pos) {
        var msg = {
            FunName: "SetEncBuf",
            InData: InData,
            pos: pos
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.GetEncBuf = function(pos) {
        var msg = {
            FunName: "GetEncBuf",
            pos: pos
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };


    this.ReSet = function(Path) {
        var msg = {
            FunName: "ReSet",
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.SetID = function(Seed, Path) {
        var msg = {
            FunName: "SetID",
            Seed: Seed,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.GetProduceDate = function(Path) {
        var msg = {
            FunName: "GetProduceDate",
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.MacAddr = function() {
        var msg = {
            FunName: "MacAddr"
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };


    this.GetChipID = function(Path) {
        var msg = {
            FunName: "GetChipID",
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.StarGenKeyPair = function(Path) {
        var msg = {
            FunName: "StarGenKeyPair",
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.GenPubKeyY = function() {
        var msg = {
            FunName: "GenPubKeyY"
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.GenPubKeyX = function() {
        var msg = {
            FunName: "GenPubKeyX"
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.GenPriKey = function() {
        var msg = {
            FunName: "GenPriKey"
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.GetPubKeyY = function(Path) {
        var msg = {
            FunName: "GetPubKeyY",
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.GetPubKeyX = function(Path) {
        var msg = {
            FunName: "GetPubKeyX",
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.GetSm2UserName = function(Path) {
        var msg = {
            FunName: "GetSm2UserName",
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.Set_SM2_KeyPair = function(PriKey, PubKeyX, PubKeyY, sm2UserName, Path) {
        var msg = {
            FunName: "Set_SM2_KeyPair",
            PriKey: PriKey,
            PubKeyX: PubKeyX,
            PubKeyY: PubKeyY,
            sm2UserName: sm2UserName,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.YtSign = function(SignMsg, Pin, Path) {
        var msg = {
            FunName: "YtSign",
            SignMsg: SignMsg,
            Pin: Pin,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.YtSign_2 = function(SignMsg, Pin, Path) {
        var msg = {
            FunName: "YtSign_2",
            SignMsg: SignMsg,
            Pin: Pin,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.YtVerfiy = function(id, SignMsg, PubKeyX, PubKeyY, VerfiySign, Path) {
        var msg = {
            FunName: "YtVerfiy",
            id: id,
            SignMsg: SignMsg,
            PubKeyX: PubKeyX,
            PubKeyY: PubKeyY,
            VerfiySign: VerfiySign,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.SM2_DecString = function(InString, Pin, Path) {
        var msg = {
            FunName: "SM2_DecString",
            InString: InString,
            Pin: Pin,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.SM2_EncString = function(InString, Path) {
        var msg = {
            FunName: "SM2_EncString",
            InString: InString,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.YtSetPin = function(OldPin, NewPin, Path) {
        var msg = {
            FunName: "YtSetPin",
            OldPin: OldPin,
            NewPin: NewPin,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.FindU = function(start) {
        var msg = {
            FunName: "FindU",
            start: start
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.FindU_2 = function(start, in_data, verf_data) {
        var msg = {
            FunName: "FindU_2",
            start: start,
            in_data: in_data,
            verf_data: verf_data
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.FindU_3 = function(start, in_data, verf_data) {
        var msg = {
            FunName: "FindU_3",
            start: start,
            in_data: in_data,
            verf_data: verf_data
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.IsUReadOnly = function(Path) {
        var msg = {
            FunName: "IsUReadOnly",
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.SetUReadOnly = function(Path) {
        var msg = {
            FunName: "SetUReadOnly",
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.SetHidOnly = function(IsHidOnly, Path) {
        var msg = {
            FunName: "SetHidOnly",
            IsHidOnly: IsHidOnly,
            Path: Path
        };
        this.Socket_UK.send(JSON.stringify(msg));
    };

    this.ResetOrder = function() {
        var msg = {
            FunName: "ResetOrder"
        };
        this.Socket_UK.send(JSON.stringify(msg));
    }

    this.ContinueOrder = function() {
        var msg = {
            FunName: "ContinueOrder"
        };
        this.Socket_UK.send(JSON.stringify(msg));
    }

}
export { SoftKey3W }